{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "ff4ca67c-c925-48c3-9057-54e2d9428645",
   "metadata": {},
   "source": [
    "## python科学数据处理"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "532e2142-562a-4f7a-8c0c-501ee9b7d8e8",
   "metadata": {},
   "source": [
    "数据量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "7f5483c2-9af7-4a60-b091-3ce728e2073f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "47185920.0\n"
     ]
    }
   ],
   "source": [
    "print( (720* 2**50)/(16* 2**30))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "82154c89-c439-45ff-9bdc-bedc38d27b8b",
   "metadata": {},
   "source": [
    "## 重点"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "04646c47-6753-4c30-9dd1-151887fa1799",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "078a61d2-011b-4904-860e-ab897612c95e",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [],
   "source": [
    "import os\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "733e3a7f-3842-451c-8ffd-381f78c8eba4",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "c4b006ed-297a-4c67-9207-08feeed0b3a1",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Writing velocity.csv\n"
     ]
    }
   ],
   "source": [
    "%%writefile velocity.csv \n",
    "name,velocity,earth\n",
    "苹果,0.1,falldown\n",
    "网球,50,falldown\n",
    "羽毛球,63,falldown\n",
    "大炮,600,falldown\n",
    "子弹,850,falldown\n",
    "鬼怪,2370,falldown\n",
    "防空导弹,3000,falldown\n",
    "神7,7820,flyout\n",
    "新视野号,16260.0,flyout"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "4ca772b9-2361-4f66-9527-d768a5b42445",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>name</th>\n",
       "      <th>velocity</th>\n",
       "      <th>earth</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>苹果</td>\n",
       "      <td>0.1</td>\n",
       "      <td>falldown</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>网球</td>\n",
       "      <td>50.0</td>\n",
       "      <td>falldown</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>羽毛球</td>\n",
       "      <td>63.0</td>\n",
       "      <td>falldown</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>大炮</td>\n",
       "      <td>600.0</td>\n",
       "      <td>falldown</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>子弹</td>\n",
       "      <td>850.0</td>\n",
       "      <td>falldown</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>鬼怪</td>\n",
       "      <td>2370.0</td>\n",
       "      <td>falldown</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>防空导弹</td>\n",
       "      <td>3000.0</td>\n",
       "      <td>falldown</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>神7</td>\n",
       "      <td>7820.0</td>\n",
       "      <td>flyout</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>新视野号</td>\n",
       "      <td>16260.0</td>\n",
       "      <td>flyout</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   name  velocity     earth\n",
       "0    苹果       0.1  falldown\n",
       "1    网球      50.0  falldown\n",
       "2   羽毛球      63.0  falldown\n",
       "3    大炮     600.0  falldown\n",
       "4    子弹     850.0  falldown\n",
       "5    鬼怪    2370.0  falldown\n",
       "6  防空导弹    3000.0  falldown\n",
       "7    神7    7820.0    flyout\n",
       "8  新视野号   16260.0    flyout"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.read_csv('velocity_earth.csv')  # 读取csv文件\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e86fd8c0-58cc-477e-834b-f1bbf71affe0",
   "metadata": {},
   "source": [
    "## python保存数据的方法：\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e197bea4-a41d-4264-bde4-5ac73f163785",
   "metadata": {},
   "outputs": [],
   "source": [
    "## numpy里面存储数据必须是同一种数据"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1f2d750b-fdf6-4dd3-b2d4-1ada7b4f0ccc",
   "metadata": {},
   "source": [
    "## 怎么样创建np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "9f374723-3176-41b6-93e5-7a6f85c08d32",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'numpy.ndarray'>\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "a=[[1,2,3,4],[5,6,7,8]]\n",
    "b= np.array(a)\n",
    "print(type(b))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "0070ab10-15d2-44d9-b6aa-51cc26e4c983",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(2, 4)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b.shape #几行几列的数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "c77fdd7d-b489-43fb-aabe-d2fca93b8485",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 2, 3, 4],\n",
       "       [5, 6, 7, 8]])"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "6a6285ac-6ae7-4ee9-8ce9-dbf2f4071149",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "7"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#拿出7 :第一行的第二列（起点为0,0）\n",
    "b[1,2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "879d6620-a8c7-4a6c-ae2f-81df7067adbb",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23\n",
      " 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47\n",
      " 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,\n",
       "       27, 28, 29, 30, 31, 32, 33, 34])"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = np.arange(64) \n",
    "print(a)\n",
    "#利用切片可提取数据：a[ 起始点: 终点：跳跃格]\n",
    "a[10:35]\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "3242440d-24b0-41a2-9f8f-08de919959f6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0,  1,  2,  3],\n",
       "       [ 4,  5,  6,  7],\n",
       "       [ 8,  9, 10, 11],\n",
       "       [12, 13, 14, 15],\n",
       "       [16, 17, 18, 19],\n",
       "       [20, 21, 22, 23],\n",
       "       [24, 25, 26, 27],\n",
       "       [28, 29, 30, 31],\n",
       "       [32, 33, 34, 35],\n",
       "       [36, 37, 38, 39],\n",
       "       [40, 41, 42, 43],\n",
       "       [44, 45, 46, 47],\n",
       "       [48, 49, 50, 51],\n",
       "       [52, 53, 54, 55],\n",
       "       [56, 57, 58, 59],\n",
       "       [60, 61, 62, 63]])"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = np.arange(64) \n",
    "a = a.reshape(16,4)\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "e4252dfb-a732-4071-a391-ab0db42de91b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[25, 26],\n",
       "       [29, 30],\n",
       "       [33, 34],\n",
       "       [37, 38]])"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = np.arange(64) \n",
    "a = a.reshape(16,4)\n",
    "a\n",
    "#切片：\n",
    "a[6 :10 ,1 :3] #？第六行到第十行，第一列到第三列的数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "13ffec78-fd43-4848-a86f-a7dd0b00c393",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[  0,   1,   2,   3],\n",
       "        [  4,   5,   6,   7],\n",
       "        [  8,   9,  10,  11],\n",
       "        [ 12,  13,  14,  15],\n",
       "        [ 16,  17,  18,  19],\n",
       "        [ 20,  21,  22,  23],\n",
       "        [ 24,  25,  26,  27],\n",
       "        [ 28,  29,  30,  31],\n",
       "        [ 32,  33,  34,  35],\n",
       "        [ 36,  37,  38,  39],\n",
       "        [ 40,  41,  42,  43],\n",
       "        [ 44,  45,  46,  47],\n",
       "        [ 48,  49,  50,  51],\n",
       "        [ 52,  53,  54,  55],\n",
       "        [ 56,  57,  58,  59],\n",
       "        [ 60,  61,  62,  63]],\n",
       "\n",
       "       [[ 64,  65,  66,  67],\n",
       "        [ 68,  69,  70,  71],\n",
       "        [ 72,  73,  74,  75],\n",
       "        [ 76,  77,  78,  79],\n",
       "        [ 80,  81,  82,  83],\n",
       "        [ 84,  85,  86,  87],\n",
       "        [ 88,  89,  90,  91],\n",
       "        [ 92,  93,  94,  95],\n",
       "        [ 96,  97,  98,  99],\n",
       "        [100, 101, 102, 103],\n",
       "        [104, 105, 106, 107],\n",
       "        [108, 109, 110, 111],\n",
       "        [112, 113, 114, 115],\n",
       "        [116, 117, 118, 119],\n",
       "        [120, 121, 122, 123],\n",
       "        [124, 125, 126, 127]],\n",
       "\n",
       "       [[128, 129, 130, 131],\n",
       "        [132, 133, 134, 135],\n",
       "        [136, 137, 138, 139],\n",
       "        [140, 141, 142, 143],\n",
       "        [144, 145, 146, 147],\n",
       "        [148, 149, 150, 151],\n",
       "        [152, 153, 154, 155],\n",
       "        [156, 157, 158, 159],\n",
       "        [160, 161, 162, 163],\n",
       "        [164, 165, 166, 167],\n",
       "        [168, 169, 170, 171],\n",
       "        [172, 173, 174, 175],\n",
       "        [176, 177, 178, 179],\n",
       "        [180, 181, 182, 183],\n",
       "        [184, 185, 186, 187],\n",
       "        [188, 189, 190, 191]],\n",
       "\n",
       "       [[192, 193, 194, 195],\n",
       "        [196, 197, 198, 199],\n",
       "        [200, 201, 202, 203],\n",
       "        [204, 205, 206, 207],\n",
       "        [208, 209, 210, 211],\n",
       "        [212, 213, 214, 215],\n",
       "        [216, 217, 218, 219],\n",
       "        [220, 221, 222, 223],\n",
       "        [224, 225, 226, 227],\n",
       "        [228, 229, 230, 231],\n",
       "        [232, 233, 234, 235],\n",
       "        [236, 237, 238, 239],\n",
       "        [240, 241, 242, 243],\n",
       "        [244, 245, 246, 247],\n",
       "        [248, 249, 250, 251],\n",
       "        [252, 253, 254, 255]]])"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = np.arange(256) \n",
    "a = a.reshape(4,16,4)\n",
    "a["
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "247f1e7d-2568-4b06-8a36-28b6a99a0221",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[ 0,  1,  2,  3],\n",
       "        [ 4,  5,  6,  7],\n",
       "        [ 8,  9, 10, 11],\n",
       "        [12, 13, 14, 15]],\n",
       "\n",
       "       [[16, 17, 18, 19],\n",
       "        [20, 21, 22, 23],\n",
       "        [24, 25, 26, 27],\n",
       "        [28, 29, 30, 31]],\n",
       "\n",
       "       [[32, 33, 34, 35],\n",
       "        [36, 37, 38, 39],\n",
       "        [40, 41, 42, 43],\n",
       "        [44, 45, 46, 47]],\n",
       "\n",
       "       [[48, 49, 50, 51],\n",
       "        [52, 53, 54, 55],\n",
       "        [56, 57, 58, 59],\n",
       "        [60, 61, 62, 63]]])"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = np.arange(64)     #从一到64\n",
    "a = a.reshape(4,4,4)  #把a改成一个4乘4乘4的格式--一个三维的列表\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "e2ac0e6c-5a76-4312-b473-d497f31e19fe",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "38"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a[2,1,2]  #"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "fc48f495-1af1-49ea-81f5-f17385823c4f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[ 0,  1],\n",
       "        [ 2,  3]],\n",
       "\n",
       "       [[ 4,  5],\n",
       "        [ 6,  7]],\n",
       "\n",
       "       [[ 8,  9],\n",
       "        [10, 11]],\n",
       "\n",
       "       [[12, 13],\n",
       "        [14, 15]],\n",
       "\n",
       "       [[16, 17],\n",
       "        [18, 19]],\n",
       "\n",
       "       [[20, 21],\n",
       "        [22, 23]],\n",
       "\n",
       "       [[24, 25],\n",
       "        [26, 27]],\n",
       "\n",
       "       [[28, 29],\n",
       "        [30, 31]],\n",
       "\n",
       "       [[32, 33],\n",
       "        [34, 35]],\n",
       "\n",
       "       [[36, 37],\n",
       "        [38, 39]],\n",
       "\n",
       "       [[40, 41],\n",
       "        [42, 43]],\n",
       "\n",
       "       [[44, 45],\n",
       "        [46, 47]],\n",
       "\n",
       "       [[48, 49],\n",
       "        [50, 51]],\n",
       "\n",
       "       [[52, 53],\n",
       "        [54, 55]],\n",
       "\n",
       "       [[56, 57],\n",
       "        [58, 59]],\n",
       "\n",
       "       [[60, 61],\n",
       "        [62, 63]]])"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = np.arange(64)     #从一到64\n",
    "a = a.reshape(16,2,2)  #把a改成一个16乘2乘2的格式--一个三维的列表\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "2a7036db-f38f-47f9-b83d-404645dc34e2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQgJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAEsASwDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD5/ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCSGFp3KIYwQjP88ioMKpY8sQM4HA6k4AySBUdFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//Z",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAIAAAD2HxkiAAAEuUlEQVR4Ae3QQREAAAzCMPybZjLGI1XQSyICBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQmBRoO/lligABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4F3gAM+2Av7UAMBsAAAAAElFTkSuQmCC",
      "text/plain": [
       "<PIL.Image.Image image mode=RGB size=300x300>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "from PIL import Image    #引入图像\n",
    "\n",
    "\n",
    "#im = np.random.randint(0,255, (100,300,3), dtype=np.uint8)# \n",
    "im = np.zeros( (300,300,3),dtype=np.uint8)\n",
    "im[150,150]=(2550\n",
    "             omarray(im)\n",
    "\n",
    "display(im) #显示图片"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "fb3690f3-7275-4636-8003-883a77cf7f88",
   "metadata": {},
   "outputs": [],
   "source": [
    "np.zeros()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "cda6ab3f-1d36-4f16-9b86-378c03898f2f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQgJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAEsASwDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD5/ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCe1tJLyUxxNCrBd2Zp0iGPq5Azz0qCiilrcWtwooopjCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//2Q==",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAIAAAD2HxkiAAAEvUlEQVR4Ae3RsQEAAAQEMfYfmuqXIJqvL6ocAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQI3Bfpm1p+qSapPRsISIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhEYAF77QECO+PfCgAAAABJRU5ErkJggg==",
      "text/plain": [
       "<PIL.Image.Image image mode=RGB size=300x300>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "from PIL import Image\n",
    "\n",
    "# im = np.random.randint(0,255, (100,300,3), dtype=np.uint8)\n",
    "def dot(x,y,color):                     #定义一个点的函数\n",
    "    im[x,y] = color                     #在x，y的位置置入颜色\n",
    "def line(x1,y1,x2,y2,color):            #定义划线函数的参数\n",
    "im = np.zeros( (300,300,3), dtype=np.uint8) \n",
    "dot(150,150,(0,255,0))\n",
    "dot(150,149,(0,255,0))\n",
    "dot(150,151,(0,255,0))\n",
    "                         #im[150,150]=(0,255,0) #在150，150位置放任一个（0,255,0）\n",
    "                         #im[150,149]=(0,255,0) #\n",
    "                         #im[150,151]=(0,255,0)\n",
    "im = Image.fromarray(im)\n",
    "\n",
    "display(im)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "672676c2-6b84-4621-9647-e6ef7acbf1c9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQgJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAGQAZADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD5/ooq5BBHewrDCu28X7q54nHoPR/QdGHA+b7wBTooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA0P+Qr/wBhD/0p/wDtn/oX+99/PorYsrG68T3ItrKCSfVyjuI4xlrkKpZiB/z0CqT/ALeP733wDHooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAroPBv/ACHLn/sFal/6RTVz9dB4N/5Dlz/2CtS/9IpqAD/ka/8AsYP/AE4//dH/AKN/66f63n6K6D/ka/8AsYP/AE4//dH/AKN/66f60A5+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK6Dwb/AMhy5/7BWpf+kU1c/XQeDf8AkOXP/YK1L/0imoA5+iiigDoP+Rr/AOxg/wDTj/8AdH/o3/rp/reforoP+Rr/AOxg/wDTj/8AdH/o3/rp/rQDn6KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACug8G/8hy5/wCwVqX/AKRTVz9dB4N/5Dlz/wBgrUv/AEimoA5+iiigAooooA6D/ka/+xg/9OP/AN0f+jf+un+t5+iug/5Gv/sYP/Tj/wDdH/o3/rp/rQDn6KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK6Dwb/yHLn/sFal/6RTVz9dB4N/5Dlz/ANgrUv8A0imoA5+iiigAooooAKKKKAOg/wCRr/7GD/04/wD3R/6N/wCun+t5+iug/wCRr/7GD/04/wD3R/6N/wCun+tAOfooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACug8G/8AIcuf+wVqX/pFNXP10Hg3/kOXP/YK1L/0imoA5+iiigAooooAKKKKACiiigDoP+Rr/wCxg/8ATj/90f8Ao3/rp/reforoP+Rr/wCxg/8ATj/90f8Ao3/rp/rQDn6KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACug8G/wDIcuf+wVqX/pFNXP10Hg3/AJDlz/2CtS/9IpqAOfooooAKKKKACiiigAooooAKKKKAOg/5Gv8A7GD/ANOP/wB0f+jf+un+t5+iug/5Gv8A7GD/ANOP/wB0f+jf+un+tAOfooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAroPBv/Icuf8AsFal/wCkU1c/XQeDf+Q5c/8AYK1L/wBIpqAOfooooAKKKKACiiigAooooAKKKKACiiigDoP+Rr/7GD/04/8A3R/6N/66f63n6K6D/ka/+xg/9OP/AN0f+jf+un+tAOfooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACug8G/8hy5/7BWpf+kU1c/XQeDf+Q5c/wDYK1L/ANIpqAOfooooAKKKKACiiigAooooAKKKKACiiigAooooA6D/AJGv/sYP/Tj/APdH/o3/AK6f63n6K6D/AJGv/sYP/Tj/APdH/o3/AK6f60A5+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAroPBv/ACHLn/sFal/6RTVz9dB4N/5Dlz/2CtS/9IpqAOfooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAOg/5Gv/ALGD/wBOP/3R/wCjf+un+t5+iug/5Gv/ALGD/wBOP/3R/wCjf+un+tAOfooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAroPBv8AyHLn/sFal/6RTVz9dB4N/wCQ5c/9grUv/SKagDn6KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA6D/ka/wDsYP8A04//AHR/6N/66f63n6K6D/ka/wDsYP8A04//AHR/6N/66f60A5+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK6Dwb/yHLn/ALBWpf8ApFNXP10Hg3/kOXP/AGCtS/8ASKagDn6KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAOg/5Gv/sYP/Tj/wDdH/o3/rp/reforoP+Rr/7GD/04/8A3R/6N/66f60A5+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAroPBv/Icuf+wVqX/pFNXP10Hg3/kOXP8A2CtS/wDSKagDn6KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDoP8Aka/+xg/9OP8A90f+jf8Arp/reforoP8Aka/+xg/9OP8A90f+jf8Arp/rQDn6KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK6Dwb/wAhy5/7BWpf+kU1c/XQeDf+Q5c/9grUv/SKagDn6KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA6D/ka/8AsYP/AE4//dH/AKN/66f63n6K6D/ka/8AsYP/AE4//dH/AKN/66f60A5+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK6Dwb/AMhy5/7BWpf+kU1c/XQeDf8AkOXP/YK1L/0imoA5+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDoP+Rr/AOxg/wDTj/8AdH/o3/rp/reforoP+Rr/AOxg/wDTj/8AdH/o3/rp/rQDn6KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACug8G/8hy5/wCwVqX/AKRTVz9dB4N/5Dlz/wBgrUv/AEimoA5+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA6D/ka/+xg/9OP/AN0f+jf+un+t5+iug/5Gv/sYP/Tj/wDdH/o3/rp/rQDn6KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK6Dwb/yHLn/sFal/6RTVz9dB4N/5Dlz/ANgrUv8A0imoA5+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAOg/wCRr/7GD/04/wD3R/6N/wCun+t5+iug/wCRr/7GD/04/wD3R/6N/wCun+tAOfooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACug8G/8AIcuf+wVqX/pFNXP10Hg3/kOXP/YK1L/0imoA5+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDoP+Rr/wCxg/8ATj/90f8Ao3/rp/reforoP+Rr/wCxg/8ATj/90f8Ao3/rp/rQDn6KKKACiiigAooooAKKKKACiiigAooooAKKKKACtzwnPDbaxcPPLHEh0y/QM7BQWa0mVRz3LEADuSBWHRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHQf8jX/wBjB/6cf/uj/wBG/wDXT/W8/RXQf8jX/wBjB/6cf/uj/wBG/wDXT/WgHP0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAdB/yNf/Ywf+nH/wC6P/Rv/XT/AFvP0V0H/I1/9jB/6cf/ALo/9G/9dP8AWgHP0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAdB/yNf/AGMH/px/+6P/AEb/ANdP9bz9FdB/yNf/AGMH/px/+6P/AEb/ANdP9aAc/RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB0H/I1/9jB/6cf/ALo/9G/9dP8AW8/RXQf8jX/2MH/px/8Auj/0b/10/wBaAc/RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBc1LUptVuFublYzclAJplBDTtk/O/OC5GASMbsZOWLMadFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/2Q==",
      "image/png": "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",
      "text/plain": [
       "<PIL.Image.Image image mode=RGB size=400x400>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "from PIL import Image\n",
    "\n",
    "# im = np.random.randint(0,255, (100,300,3), dtype=np.uint8)\n",
    "def dot(x,y,color=255):                    #定义一个点的函数\n",
    "    im[x,y] = color                        #在x，y的位置置入颜色\n",
    "def line(x1,y1,x2,y2,color):\n",
    "    for x in range(x1,x2+1):\n",
    "        y = int((x-x1)/(x2-x1)*(y2-y1) +0.5)+y1  #通过斜率计算出每一个与x对应的y点\n",
    "        \n",
    "        dot(x,y,color)                #多个点汇聚成一条直线                #定义划线函数的参数\n",
    "                   #对于x的始末坐标，也就是直线上的每一个整数点\n",
    "       \n",
    "           \n",
    "im = np.zeros( (400,400,3), dtype=np.uint8) #创建一个400乘400的图像数组，初始值为黑色\n",
    "\n",
    "line(10,10,300,300,128)\n",
    "line(30,30,310,30,255)\n",
    "line(30,30,370,370,255)\n",
    "im = Image.fromarray(im)\n",
    "\n",
    "display(im)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ccd3de94-d28f-4c9b-b39d-5bba00886041",
   "metadata": {},
   "source": [
    "## 作业：写出一个满足任何情况的line函数还要避免画出很松散的点\n",
    "## 和一个画圆的函数：def circle（x,y,r,color):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "653e6420-e9d7-4d66-b0c0-bf6139170ff9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/jpeg": "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iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/2Q==",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZAAAAGQCAIAAAAP3aGbAAAIWUlEQVR4Ae3UwQkAMAgDQN1/aLtAvwGFc4CQ3MMqR4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDADYHO1ZxctGQCBHYLBD/L7uHaESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBX4AH13gECDnwtoAAAAABJRU5ErkJggg==",
      "text/plain": [
       "<PIL.Image.Image image mode=RGB size=400x400>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6c441cf6-2d9c-40c7-8a19-8e5911f3a95c",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 109,
   "id": "e62d7a42-89dd-4ce8-9155-c0268967a557",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/jpeg": "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AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKANC0/0+3+wNzOuWtmPsCTGO/zHoOfm4A+cmqc//HxJ/vH+dR1oXsEckH2u3XaEbyrhc/dkO7aRnsyrnr1DcAba6F/Af+JfkxdTPooornGFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVetrlLbUnMwZreQtHOq8koeuAeMjqM8BgD2qjUk/8Ax8Sf7x/nXQv4D/xL8mLqOurZ7S4MLlWOFZWXoysAykd+QQeeeecVDWhb/wCn2YsjzcRZa27mTJGY/wCbKPXcMEsMZ9c4wooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACpJ/+PiT/AHj/ADqOpJ/+PiT/AHj/ADroX8B/4l+TF1GxyPFIskbsjoQyspwQR0INXL2NJ4Ev4UVEc+XLGoxskAGTxwA3JA46MAMLk0atWFylvOVmDNbTARzqv3imQfl9wQCO2QM5GRXOMq0VNdWz2lwYXKscKysvRlYBlI78gg88884qGgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKkn/AOPiT/eP86jqSf8A4+JP94/zroX8B/4l+TF1I6KKK5xmhF/xMLH7Oebm1Rmh7Bohud1PuOWHTjcMn5RWfTo5HikWSN2R0IZWU4II6EGrl/Gkyi/gRVjmJ82NBhYZCT8o9AQMr7ZGSVJoAo0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFST/8fEn+8f51HUk//HxJ/vH+ddC/gP8AxL8mLqR0UUVzjCrVlcpCzxThmtpRiRRzg4O1wPVSc9RnkZwTVWigCa7tns7qS3kKsUONy8qw7Mp7gjBB7gioa0I/9O01ojzcWabosfxRZJdcdyC276b8ngYz6ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACpJ/8Aj4k/3j/Oo6kn/wCPiT/eP866F/Af+JfkxdSOiiiucYUUUUASQTyW1xFcQttlicOjYzgg5B5qxfQRhYru2XbbzZAXP3JABvXnnALAjk8EZOc4p1csJ41Z7a5bba3G1ZHxnyyDxIB3I59yCwGM5oAp0VJPBJbTNFKu1198gg8ggjggjBBHBBqOgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACpJ/+PiT/eP86jqSf/j4k/3j/OuhfwH/AIl+TF1I6KKK5xhRRRQAUUUUAaA/4mFiQebq1QtuPJliGBt+qcnv8ueQEArPqSCeS2uIriFtssTh0bGcEHIPNWL+CNWS5tl22txuaNM58sg8xk9yOPcgqTjOKAKdFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVJP/x8Sf7x/nUdST/8fEn+8f510L+A/wDEvyYupHRRRXOMKKKKACiiigAq5YzxhZbS5bbbzYJbH3JADsbjnALEHg8E4GcYp0UASTwSW1xLbzLtlico65zgg4I4qOtA/wDEwsQRzdWqBdo5MsQyd31Tgd/lxwAhNZ9ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVJP/x8Sf7x/nUdST/8fEn+8f510L+A/wDEvyYupHRRRXOMKKKKACiiigAooooAkgnktplliba6+2QQeCCDwQRkEHgg1Yv4I1ZLm2Xba3G5o0znyyDzGT3I49yCpOM4qnV6wkSZTYTuqxzEeVI5wsMhI+Y+gIGG9sHBKgUAUaKdJG8UjRyIyOhKsrDBBHUEU2gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqSf/AI+JP94/zqOpJ/8Aj4k/3j/OuhfwH/iX5MXUjooornGFFFFABRRRQAUUUUAFFFFAGhL/AMTCx+0Dm5tUVZuwaIbURh7jhT042nB+Y1n1NaXL2d1HcRhWKHO1uVYd1YdwRkEdwTUl7bJCySwFmtpRmNjzg4G5CfVScdBng4wRQBVooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqSf8A4+JP94/zqOpJ/wDj4k/3j/OuhfwH/iX5MXUjooornGFFFFABRRRQAUUUUAFFFFABV6xkSaOSxndQkgLQs5wI5eMHPbdjaeQOQT90VRooAdJG8UjRyIyOhKsrDBBHUEU2tC4/0+zN6ObiLC3PcyZJxJ/JWPrtOSWOM+gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACpJ/8Aj4k/3j/Oo6kn/wCPiT/eP866F/Af+JfkxdSOiiiucYUUUUAFFFFABRRRQAUUUUAFFFFAE1rcvaXAmQKxwysrdGVgVYHvyCRxzzxipL+2S3nDQlmtpgZIGb7xTJHze4IIPbIOMjBqrV6ykSeB7CZ1RHPmRSMcbJADgc8ANwCeOiknC4IBRop0kbxSNHIjI6EqysMEEdQRTaACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqSf/j4k/wB4/wA6jqSf/j4k/wB4/wA66F/Af+JfkxdSOiiiucYUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBoXf8Ap9v9vXmdcLcqPYACQ9/mPU8/NyT84FZ9WLK6+yXAdk8yFvlmiJwJEzyp9OnXsQCOQKLy1+yzKqv5kToJI5MY3Kf6jkEAnBBGeKAK9FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABUk/wDx8Sf7x/nUdST/APHxJ/vH+ddC/gP/ABL8mLqR0UUVzjCiiigAooooAKKKKACiiigAooooAKKKKACtCx/02H+zG/1jPute371toKk+jAAc9CF5A3Vn0UAFFaF5/ptouoj/AFocQ3A9W2/K+e5ba2evKkk/MBWfQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVJP/x8Sf7x/nUdST/8fEn+8f510L+A/wDEvyYupHRRRXOMKKKKACiiigAooooAKKKKACiiigAooooAKKKKALFndfZZmZk8yJ0MckecblP9RwQSDggHHFF7a/ZLgor+ZC3zQygYEiZ4YenTp2IIPINV60LT/T7f7A3M65a2Y+wJMY7/ADHoOfm4A+cmgDPooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqSf8A4+JP94/zqOpJ/wDj4k/3j/OuhfwH/iX5MXUjooornGFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBoX3+mw/2mv+sZ9t12/etuIYD0YAnjoQ3AG2s+rWn3KW10DMGa3kBjnVeSUPXAPGR1GeAwB7VVoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqSf8A4+JP94/zqOpJ/wDj4k/3j/OuhfwH/iX5MXUjooornGFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVJP/wAfEn+8f51HUk//AB8Sf7x/nXQv4D/xL8mLqR0UUVzjCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKkn/4+JP94/zqOpJ/+PiT/eP866F/Af8AiX5MXUjooornGFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVJP/AMfEn+8f51HUk/8Ax8Sf7x/nXQv4D/xL8mLqR0UUVzjCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKV2LuzHqTmkop8zty9ACiiikAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf//Z",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZAAAAGQCAIAAAAP3aGbAAAQyUlEQVR4Ae3ci44ctxEF0E3gD/efJ5Tt9WqlefSDzSZvHSOApJ3pJusUcVG0jHx8+IcAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCwk8Oeffy60W1slQCBb4L/Z5amOAIFaAoasWv1WLYGJBUxYEzfH1ggQOCBgyDqA5hECBG4TkFm30VuYAIFPAVfCTwm/EiCQJGDISuqmWgjkC8is/B6rkMDEAq6EEzfH1ggQOClgyDoJ6HECBIYKyKyh3BYjQOBTwJXwU8KvBAikChiyUjurLgKZAjIrs6+qIjCxgCvhxM2xNQIEOgoYsjpiehUBApcLyKzLiS1AgMCngCvhp4RfCRCoIGDIqtBlNRLIEXiYWf/7+PA/AgTWFZgwof64bk//ue7V3kyAAIEzAg+HrDMv9CwBAgQuFJBZF+J6NQECHx/+ltApIECgqoAhq2rn1U1gTQGZtWbf7JrAAgKuhAs0yRYJELhQwJB1Ia5XEygsYMIq3HylEyDwt8CGIav9B8D+IUCAwBwC7zJLYM3RJ7sgsI6AK+E6vbJTAgQuFXg5ZJmwLrX3cgIE9gs8zyyBtV/TEwRqC7gS1u6/6gkQ+EXgyZBlwvrFyR8JEJhD4FFmCaw5emMXBNYRcCVcp1d2SoDAMIHfhiwT1jB7CxEgsF/ge2YJrP2CniBQW8CVsHb/VU+AwAuBn4YsE9YLJx8RIDCHwGdmCaw5+mEXBNYRcCVcp1d2SoDALQJ/DVkmrFvsLUqAwBEBgXVEzTMEKgu4ElbuvtoJLCZwZ2B9/tv3xchslwCBggI/roQyq2DjlUzgsMCdE9bhTXuQAAECgwX++ZfuhqzB7pYjQOCAwNffEsqsA3weIVBQwJWwYNOVTIDAboGvCas9asja7ecBAgQGCnwLrLauzBqIbykCSwq4Ei7ZNpsmQGCwwK8TVlvekDW4B5YjsJaACWutftktAQL3CDyYsNpGDFn3dMOqBAi8FHgcWO0RmfXSzYcE6gq4EtbtvcoJENgu8HTCaq8wZG139E0CBAYIvAqstrzMGtADSxBYS8CVcK1+2S0BAvcIvJmw2qYMWfd0xqoECPwm8D6w2iMy6zc3PyBQV8CVsG7vVU6AwHaBTRNWe50ha7upbxIgcJHA1sBqy8usi3rgtQTWEnAlXKtfdkuAwD0COyastkFD1j1dsioBAn8J7Aus9ojMcnIIFBdwJSx+AJRPgMAmgd0TVnurIWsTrS8RINBb4EhgtT3IrN6N8D4Cywi4Ei7TKhslQOBGgYMTVtuxIevGtlmaQE2B44HVvGRWzUOj6uICroTFD4DyCRDYJHBqwmorGLI2MfsSAQI9BM4GVtuDzOrRCO8gsIyAK+EyrbJRAgRuFOgwYbXdG7JubKGlCdQR6BNYzUtm1Tk0Ki0u4EpY/AAonwCBTQLdJqy2miFrE7kvEVhcwIS1eANtnwCBIQI9J6y2YUPWkK5ZhEBRgc6B1RRlVtGjpOwyAq6EZVqtUAIETgj0n7DaZgxZJzriUQIEngpcElhtNZn1lNwHBBYXcCVcvIG2T4DAEIGrJqy2eUPWkA5ahEAhgQsDqynKrEJHSallBFwJy7RaoQQInBC4dsJqGzNkneiORwkQ+CZweWC11WTWN3J/ILC4gCvh4g20fQIEhgiMmLBaIYasId20CIFwgUGB1RRlVvhRUl4ZAVfCMq1WKAECJwTGTVhtk4asE53yKAECH0MDq3nLLIeOwOoCroSrd9D+CRAYITB6wmo1GbJGNNYaBBIFbgisxiizEs+SmqoIuBJW6bQ6CRA4I3DPhNV2bMg60zbPEqgpcFtgNW6ZVfPMqXp1AVfC1Tto/wQIjBC4c8Jq9RmyRjTZGgRSBG4OrMYos1LOkjqqCLgSVum0OgkQOCNw/4TVdm/IOtNCzxIYLGDCGgxuOQIElhSYYsJqcoasJY+PTRMYKzBLYLWqZdbY1luNwEEBV8KDcB4jQKCUwEQTVnM3ZJU6fIolsFdgrsBqu5dZe1vo+wQGC7gSDga3HAECSwpMN2E1RUPWkkfJpglcLzBjYLWqZdb1rbcCgYMCroQH4TxGgEApgUknrNYDQ1apg6hYAlsE5g2stnuZtaWFvkNgsIAr4WBwyxEgsKTA1BNWEzVkLXmsbJrANQKzB1arWmZd03pvJXBQwJXwIJzHCBAoJbDAhNX6YcgqdSgVS+CZwBqB1XYvs5610M8JDBZwJRwMbjkCBJYUWGbCarqGrCWPmE0T6CewUmC1qmVWv9Z7E4GDAq6EB+E8RoBAKYHFJqzWG0NWqQOqWAI/C6wXWG33MuvnFvo9gcECroSDwS1HgMCSAktOWE3akLXkcbNpAucEVg2sVrXMOtd6TxM4KOBKeBDOYwQIlBJYeMJqfTJklTqsip1EwIQ1SSNsgwCBqQXWnrAarSFr6vNlcwS6CiwfWE1DZnU9El5G4I2AK+EbIB8TIECgCSRMWK0MQ5bTTKCCQEhgyawKh1WNkwi4Ek7SCNsgQGBqgZwJqzG7GE591myOwGmBqMBqGjLr9JHwAgJvBFwJ3wD5mAABAk0gbcJqJRmynGwCqQKBgSWzUg+ruiYRcCWcpBG2QYDA1AKZE1YjdzGc+tzZHIFDArGB1TRk1qEj4SECbwRcCd8A+ZgAAQJNIHnCauUZspxyAkkC4YEls5IOq1omEXAlnKQRtkGAwNQC+RNW43cxnPoM2hyBzQIlAqtpyKzNR8IXCbwRcCV8A+RjAgQINIEqE1Yr1ZDlxBNYXaBQYMms1Q+r/U8i4Eo4SSNsgwCBqQVqTVitFS6GU59HmyPwUqBcYDUNmfXySPiQwBsBV8I3QD4mQIBAE6g4YbWyDVlOP4HDAiasw3QeJECgkEDRCat12JBV6JgrNUWgbmDJrJQzrI7RAq6Eo8WtR4DAigKlJ6zWMBfDFU+tPZcVqB5YMqvs0Vf4YQFXwsN0HiRAoJCACetHs10MCx15pa4sILD+6Z7MWvkY2/tQAVfCodwWI0BgUQET1lfjDFlfFn5HYEoBgfWtLTLrG4c/EHgk4Er4SMXPCBAg8F3AhPXdw98Y/urhzwQmEhBYD5rhYvgAxY8IfAq4En5K+JUAAQLPBUxYj20MWY9d/JTArQIC6ym/zHpK44PaAq6EtfuvegIEtgmYsF45GbJe6fiMwHABgfWGXGa9AfJxPQFXwno9VzEBAvsFTFjvzQxZ7418g8AQAYG1iVlmbWLypRoCroQ1+qxKAgTOCZiwtvoZsrZK+R6BywQE1g5ambUDy1dzBVwJc3urMgIE+gmYsPZZGrL2efl2ooAJK7GraiJAoLeACWu3qCFrN5kHCHQSEFhHIGXWETXPpAi4EqZ0Uh0ECFwpYMI6qGvIOgjnMQInBATWcTyZddzOkysLuBKu3D17J0BglIAJ65S0IesUn4cJ7BQQWDvBfvu6zPqNxA/CBVwJwxusPAIEugiYsDowGrI6IHoFgQ0CAmsD0oavyKwNSL4SIuBKGNJIZRAgcKmACasbryGrG6UXEXgiILCewBz6scw6xOahxQRcCRdrmO0SIHCLgAmrM7shqzOo1xH4SUBg/YTR6bcyqxOk10wq4Eo4aWNsiwCBqQRMWJe0w5B1CauXlhcQWFcdAZl1laz33i3gSnh3B6xPgMAKAiasC7tkyLoQ16tLCgisa9sus6719fY7BFwJ71C3JgECqwmYsC7vmCHrcmILlBEQWCNaLbNGKFtjlIAr4Shp6xAgsLKACWtQ9wxZg6Atc72ACet6YysQILC+gAlrXA8NWeOsrRQqILCGNlZmDeW22DUCroTXuHorAQJZAias0f00ZI0Wt16QgMC6oZky6wZ0S/YTcCXsZ+lNBAjkCpiw7umtIesed6suLiCwbmugzLqN3sLnBFwJz/l5mgCBGgImrDv7bMi6U9/aCwoIrJubJrNuboDl9wu4Eu438wQBAvUETFj399yQdX8P7GARAYE1RaNk1hRtsIltAq6E25x8iwCB2gImrFn6b8iapRP2MbGAwJqoOTJrombYynMBV8LnNj4hQIDAp4AJ61Nijl8NWXP0wS4mFRBY0zVGZk3XEhv6LuBK+N3DnwgQIPBIwIT1SOXunxmy7u6A9ScVEFiTNkZmTdoY2/r4cCV0CggQIPBewIT13uiubxiy7pK37rQCAmva1vzYmMyauj1VN+dKWLXz6iZAYI+ACWuP1h3fNWTdoW7NVwImrFc6PiNAgMDfAiasBU6CIWuBJtniEAGBNYT59CIy6zShF3QTcCXsRulFBAgEC5iwlmmuIWuZVtnoZQIC6zLaC14ssy5A9crdAq6Eu8k8QIBAQQET1mJNN2Qt1jDb7SogsLpyDnmZzBrCbJGnAq6ET2l8QIAAgX8FTFj/Uqz0G0PWSt2y134CAquf5dg3yayx3lb7EnAl/LLwOwIECDwTMGE9k1ng54asBZpki10FBFZXzuEvk1nDyS3o/9PdGSBAgMAGARPWBqS5v2LImrs/dtdTQGD11LzrXTLrLvma6/pbwpp9VzUBAvsETFj7vKb9tiFr2tbYWEcBgdUR8+ZXyaybG1BmeVfCMq1WKAECJwRMWCfw5nvUkDVfT+yop4DA6qk5w7tk1gxdyN6DK2F2f1VHgEAfARNWH8ep3mLImqodNtNRQGB1xJzoVTJrombEbcWVMK6lCiJA4AIBE9YFqHO80pA1Rx8Cd2HCCmyqkggQ6C5gwupO6oUEwgVMWOENVh6BJAGBldRNtRAIFxBY4Q1WHoEkAYGV1E21EAgXEFjhDVYegSQBgZXUTbUQCBcQWOENVh6BJAGBldRNtRAIFxBY4Q1WHoEkAYGV1E21EAgXEFjhDVYegSQBgZXUTbUQCBcQWOENVh6BJAGBldRNtRAIFxBY4Q1WHoEkAYGV1E21EAgXEFjhDVYegSQBgZXUTbUQCBcQWOENVh6BJAGBldRNtRAIFxBY4Q1WHoEkAYGV1E21EAgXEFjhDVYegSQBgZXUTbUQCBcQWOENVh6BJAGBldRNtRAIFxBY4Q1WHoEkAYGV1E21EAgXEFjhDVYegSQBgZXUTbUQCBcQWOENVh6BJAGBldRNtRAIFxBY4Q1WHoEkAYGV1E21EAgXEFjhDVYegSQBgZXUTbUQCBcQWOENVh6BJAGBldRNtRAIFxBY4Q1WHoEkAYGV1E21EAgXEFjhDVYegSQBgZXUTbUQCBcQWOENVh6BJAGBldRNtRAIFxBY4Q1WHoEkAYGV1E21EAgXEFjhDVYegSQBgZXUTbUQCBcQWOENVh6BJAGBldRNtRAIFxBY4Q1WHoEkAYGV1E21EAgXEFjhDVYegSQBgZXUTbUQCBcQWOENVh6BJAGBldRNtRAIFxBY4Q1WHoEkAYGV1E21EAgXEFjhDVYegSQBgZXUTbUQCBcQWOENVh6BJAGBldRNtRAIFxBY4Q1WHoEkAYGV1E21EAgXEFjhDVYegSQBgZXUTbUQCBcQWOENVh6BJAGBldRNtRAIFxBY4Q1WHgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQJDA/wHiPwcbyNvcUAAAAABJRU5ErkJggg==",
      "text/plain": [
       "<PIL.Image.Image image mode=RGB size=400x400>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "from PIL import Image\n",
    "\n",
    "# 全局变量，用于存储图像数据\n",
    "im = np.zeros((400, 400, 3), dtype=np.uint8)\n",
    "\n",
    "\n",
    "def dot(x, y, color):# 定义一个点的函数\n",
    "    \n",
    "        im[x, y] = color\n",
    "\n",
    "\n",
    "def line(x1, y1, x2, y2, color):# 定义画线函数\n",
    "    dx = x2 - x1               #求出斜率\n",
    "    dy = y2 - y1\n",
    "\n",
    "    \n",
    "    if dx == 0:                #x1=x2的时候，可以画出竖线\n",
    "                               #生成一个y1开始到y2结束的数列，包括y2，因为range不包括结束值       \n",
    "        for y in range(y1, y2+1):#画竖线的时候主要是y变化\n",
    "            dot(x1, y, color)\n",
    "        \n",
    "    else:\n",
    "        # 斜线或横线\n",
    "                       \n",
    "        step_x = dx      \n",
    "        step_y = (dy > 0) - (dy < 0)  #如果y在上面就往上移动,在下面就往下移动\n",
    "        y = y1                        #如果不是横线,y1不等于y2的时候，算出一个它们的差值 \n",
    "                                      #然后利用差值上下移动，因为要range（x），\n",
    "                                      #所以把y看成变量\n",
    "        \n",
    "        for x in range(x1, x2 + 1):   #正常情况下以x作为变量\n",
    "            dot(x, y, color)          #根据当前的数据打出一个点\n",
    "            step_x -= abs(dy)         #打完一个点后算出一个dy边长度的x，这样可以形成一个dy边长的小方格    \n",
    "            if step_x < 0:            #如果还没到终点\n",
    "                \n",
    "                y+=step_y             #打完一个点后，向y方向移动，改变移动距离知道抵达终点\n",
    "                step_x += dx          \n",
    "\n",
    "# 画线\n",
    "line(10, 10, 300, 200, (128, 128, 128))  # 斜线\n",
    "line(30, 30, 30, 350, (255, 0, 0))       # 竖线\n",
    "line(40, 40, 370, 40, (0, 0, 255))       # 横线\n",
    "\n",
    "\n",
    "im = Image.fromarray(im)               # 将numpy数组转换为PIL图像\n",
    "\n",
    "\n",
    "display(im)                            # 显示图像"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 119,
   "id": "0819fd17-8954-44b4-82c1-d9aba2a94ba2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQgJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAGQAZADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD5/ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooq3ZabdX7YgiJXOC54Ufj+PTrUykoq7ZpSpVK01CnFtvotSpRXWWfhaCMhruUzHH3F+Vc9+ep/Stq3tLe0XbBCkYwAdo5OOmT3rhqY+nHSKufWYThLF1VzV5KC+9/hp+Jw0WkahMxVbOUEDPzrtH5nFXY/C+oPGGZoYyf4Wc5H5AiuyorklmFR7JI+go8I4KP8SUpfNL8kcf8A8Irff89bf/vpv8Kc3hS8DHbNAVzwSSCR9MV11FR9ereX3HR/qrlvaX/gT/yOObwtfqpIeBiBkKGOT7ciqU2jajBt32khz02Df/LOK76irjj6q3SZhV4RwMl+7lKPzv8AmjzRlZGKspVlOCCMEGkr0iWCKdQs0SSKDkB1BGfxrGu/C9pNg27tbnuPvg/mc5/GuqnmEHpNWPBxfCOJprmw8lPy2f8Al+KOQoq9faReaflpY90f/PROV7fl171RrvjKMleLufJVqFWhN06sXF9mFFFFUYhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVJDDJcTLDCheRzgKKnsNOuNRmMcCj5RlnbhV+tdrp2nQ6bb+VFyx5dyOWP8Ah7VyYjFRpKy1Z9Dk+RVswlzy92n37+S/z2XnsZel+G44gs17iSQgERfwqff1/l161vqqooVVCqowABgAUtFeJUqzqO8mfqGCy/D4KnyUI28+r9X/AEuyCiiisjuCiiigAooooAKKKKACiiigArF1Hw5bXQ32wW3l9h8rcdMdvqPfrW1RWlOpKm7xZyYvBUMXT9nXimvxXo90ec3NrPZzGK4jKPjOD3H1qGvRbyzhvrdoJ1yp6EdVPqPeuJ1PSLjTGBkw8THCyL0+h9DXtYfFxq6PRn5jnPD9XAP2lO8qffqvX/P8ihRRRXafMhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFW9OsJNRuxBGQvG5mP8ACvr71BDDJcTLDCheRzgKK7zTtOh0238qLljy7kcsf8PauTFYhUo2W7PociyeWYVuaf8ADjv5+S/XsvVEtnZw2NusEC4UdSerH1PvU9FFeA227s/W6dONOKhBWS2QUUUUiwooooAKKKKACiiigAooooAKKKKACiiigAqOaGO4haGZA8bjBU1JRQnbVClFSTjJXTOE1fS30y4C7t0MmTGx68dj781nV6LeWcN9btBOuVPQjqp9R71wV9ZyWN28EgPyn5WIxuXsa97CYn2q5Zbo/KOIMleBqe1pL93Lbyfb07fd0K9FFFdp8wFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFW9Nsmv76OAZ2k5cjso6/wCfUiplJRTbNKVKdapGnBXbdl8zofDeliKH7bMoMkg/dgjlV9fx/l9a6CkVVRQqqFVRgADAApa+bq1HUm5M/bcvwVPBYeNCHTfzfV/10sgooorI7gooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACsjXtLF9aGWNR9oiGQcZLL/d4/T/AOvWvRV05unJSic2LwtPFUZUaq0f9X9UeZ0Vp67YfYdRbYuIZfnTA4HqPwPb0xWZX0sJqcVJdT8RxOHnhq0qNTeLt/XruFFFFWc4UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXWeFrMx2sl2wGZTtTjnaOvPue3tXJ16NaW62lpFAuMRqFyBjJ7nHv1rz8fU5aaiup9hwlhFVxcq8toL8Xp+VyaiiivEP08KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAMjxFZm60xnUDfCfM6c7e4z+v4VxVelsqupVlDKwwQRkEV5zcw/Z7qaHdu8tymcYzg4r2MvqXi4PofnHF+EUK0MTH7Ss/Vbfh+RFRRRXpnw4UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAF3SImm1e1VSARIG59F5P8q7+uN8Lxo+rFmGSkTMvscgfyJrsq8TMJXqJdkfqHCNHlwUqn80n+CSCiiivPPrwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK4rxJE0esyMSMSKrDHpjH9DXa1y/i2NBLaygfOyspPsMY/ma7cDK1a3c+Y4po+0y5y/laf6fqc3RRRXvH5OFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBueFf8AkKS/9cT/AOhLXYVyPhRmGozLuO0wkkZ4JBGP5n8666vBx38b5I/WOFf+Rav8UvzQUUUVxH04UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFcz4u/5c/8Agf8A7LXTVzXi1mC2i7jtJckZ4JGMfzP5114P+NH+uh4HEn/Isq/L/wBKRzFFFFfQH4+FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBt+FmVdVcFgC0JABPU5B/oa7GuB0abyNYtX27svsxnH3vl/rXfV4mPjaqn3R+o8I1VLAyp/yyf42YUUUV559cFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXMeLWUtaLuG4ByRnkA4x/I/lXT1xfiWbzdYZNuPKRUznr/F/Wu3AxvWT7HzPFNVU8ulH+Zpfjf8AQx6KKK94/JgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAFVmRgysVZTkEHBBr0eCVZ4I5lBCyKGAPXBGa83rr/C9352ntbkYMDcHHUNk/nnP6V52YU7wU10Ps+EcWqeJlh5fbWnqv+Bf7jdooorxT9MCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArzq9uPtV7PPliHcld3UDPA/Kuy1+7+y6TLgZaX90OOBkHP6Zrhq9fL6dk5/I/O+MMWpVKeGXT3n89F+Fwooor1D4QKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAq9pF9/Z+oxysf3Z+ST/AHT/AIcH8Ko0VMoqUXF9TahWnQqxq03rF3R6ZRWL4c1EXVmLZ/8AWwKB1HzL2x9On5etbVfNVKbpycWft2CxdPF0I16ezX3PqvkwooorM6wooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiis7WdRGnWRZf9dJlYxkcHHX6D/CqhBzkordmGIxFPD0pVqjtGKuc54jvvtWomJT+7gyg92/i/w/CseiivpqcFCKiuh+I4zFTxVedee8nf/JfJaBRRRVnKFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUATWtzJZ3UdxERvQ5GRkH1Fd/Z3kN9brPA2VPUHqp9D7151V/SNTbTLvzCC0Tja6g9vUe4/wAa4sXh/axut0fTcP5y8BV9nU/hyevk+/8An/wDvaKjhmjuIVmhcPG4yGFSV4LVtGfrEZKSUou6YUUUUDCiiigAooooAKKKKACiiigAooooAKKKKACiikZlRSzMFVRkknAAoBu2rGTTR28LTTOEjQZLGuD1O/fUb1524UfLGMYwuePxq3rmrjUZljhyLeMnBP8AGfXH8v8A69ZFe5g8N7Nc8t3+B+W8RZ19cn9Xov8Adxe/8z/yXT7+wUUUV3nyQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAGjperzaZI20eZC33oycc+oPY12lneQ31us8DZU9Qeqn0PvXnVWLO+uLGYSQSFeclc/K3sR3rixOEVX3o6M+nyXiCpgWqVX3qfbqvTy8vuseiUVkaXr1vfBY5SIbjAyCcKx6fL/h796168SdOVN8skfp+FxdHFU1Voyuv637MKKKKg6QooooAKKKKACiiigAooooAKKKztR1m104bWPmTdo0IyOM8+g6VUISm7RV2YYjEUsPTdStJRiu5dmmjt4WmmcJGgyWNcdq+uSaiPJjUxW4PK55f0z/h/Oql/qd1qMm6d8KMYjXIUe+PXrzVOvaw2DVP3p6v8j80zriKeMvRw940+veX+S8vv7BRRRXefJBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVp2Gu3ljtTf5sI42PzgcdD24H09qzKKicIzVpK50YfE1sNP2lGTi/L+tfmdrZ+IrG6IV2MD4/5afdz3wf8cVrKyuoZWDKwyCDkEV5pUsNzPb7vJmki3ddjFc/lXn1Mvi9YOx9hhOL60Fy4mCl5rR/dt+R6PRXFReJNSjYlpElGMbXQY+vGKux+LZBGBLZqz9ysm0flg/zrklgay21PoKPFOXVPibj6r/K51FFcz/wl3/Tj/5F/wDsaVvFqhjtsiVzwTJgkfTFT9Trfy/kdH+smWf8/fwl/kdLRXMN4tYqdtkA2OCZMgH6YqlN4l1GXbsaOLHXYmc/nmqjgaz3VjCrxTl1Ne7Jy9E/1sdpWZd6/p9rgeb5zHtDhsD69P1rjbi9urrPn3EkgLbtrMcA+w6CoK6qeXpfG/uPBxfGFSSthqdvOWv4LT8TYvvEd5dZWI/Z4/RD8x6fxf4YrHoor0YU4wVoqx8disZXxU+evNyfn+i2XyCiiirOUKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9k=",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZAAAAGQCAIAAAAP3aGbAAAPCUlEQVR4Ae3b65KjOAwG0N59/3ee3fRuzUAnJGBLsoEzv3LBMjkSH1RXzdeXfwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIXFLg1yV/lR81WuCv0Sdg/zMJJMWQKTzTEAw9V6MylH/6zZMS6v3vNpTvfe78rdm4c/df/PYhCfXiPBYfmdEFxt1fGoa7T8C/v3/CkNrqinndkrnJ5wbgJo1+8TNPlFPPZ29wn03u8Im+36HLq9946pxa/ZLvNyb42eTCn2j3hZv786ddLKqWP88cLzUu/FqjL9zc/3/ahXPquXkG+tnkSp/o75W6+fO33Cqqlj/eWC81rvRaZ6/UzT+/5bZR9Yfg68twLzWu8VpPr9HHP79CVP2x+H5lxH+AnPqtbp66fauTF1UrjvUbg772OOs7fTxr55bnLaqWGm9eG/c3OKf4SgdP0abNkxRVmzTbXxj6bZvZv/l79hN0ftsC0mrb5t033N7pzP2d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gRXj+LGK2+9HolMfoL817RNYNc6PXcx0nXXtTjpb5i2wyqgfG5nsUu6SzfS0hPn/TQRWpfZjL/NdLZ65n25m6r6oLbBeoGR/ZMqzhWvq62ON83IXgbXU8JoAgakFBNaY9rg5j3GP21UH4ywPVBJYB7BiDzXxsZ6V1fSuUnu5l8BaalS/NvfV4hH76VqEYmMNgdUIF7XM9EdJ1tTRrxrnrV0E1pZM3eeugTrrvp10qs8vYLXACkDsL+FK6DfMrqBH2cJ76gusPUoVx7geKpRb99CdVrngdQIrGLSnnKuiRy9vrb7k2R6tLLCOiuUe79rI9T1eXUeOmyWu0I5E3J7Sv3oWWxsh4NqIUAyu4QkrGDSqnKslSrKtDv82t+xVAitbuL2+a6bdrm8l+T6/xNUCKxG3v7Qrp9/waAXmR8UqjxdYldote7l+WtRa19BulStap0FF0P3b+DN8v+GbCq6ENzjzfOUJa55efDgTV9QHoI6v2XbglS7VqVLukM08aoUw/lfEBRCIWVDKE1YBcvAWrrEoUJJRkmV1tKyMOn4jj1rNpua+mW7sQk9YY/27dnfVtfFxa3ObYZXezdCF3nPwqLVT0LjvhJr2MB2ctjWHT0xsvSEz6G9wTvSVPp6oWbtOVWz9YDLiP0BO/VY3T92+zZMXW//SGO7N+TjtF3p62tbtOPHbxpax3jEdpzxEZ0/ZtkMnfavYMtCHZuN0B+vv6VrWfsIXTi5z3D4Wp1qp0adqV8TJXiy2THDEUJymhnafplXhJ3rq5DK44fNwioL6foo25Z7kiZLLvOaOwvTVDcD0Lao9wQnDy4zWjsDUuxmGqdsz/OSG5JehHN73aU/AbEzbmhlPLCm/TOGMzXZOBO4jkBRt9wH0SwkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDgbgL/AOu0eGprgaJkAAAAAElFTkSuQmCC",
      "text/plain": [
       "<PIL.Image.Image image mode=RGB size=400x400>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "from PIL import Image\n",
    "\n",
    "# 全局变量，用于存储图像数据\n",
    "im = np.zeros((400, 400, 3), dtype=np.uint8)\n",
    "\n",
    "\n",
    "def dot(x, y, color):                           # 定义一个点的函数\n",
    "    \n",
    "        im[x, y] = color\n",
    "def circle(x0,y0,r,color):                      #定义一个圆的函数\n",
    "    for y in range(y0 - r, y0 + r + 1):         #在以x0,y0为中心的，以r为边长的正方形里面：\n",
    "        \n",
    "        for x in range(x0 - r, x0 + r + 1):\n",
    "            if (x - x0)**2 + (y - y0)**2 <=r**2:#如果每一个点满足圆的定义方程\n",
    "                dot(x ,y ,color)                #那就可以把点打出来\n",
    "circle(200,200,100,(255,0,0))\n",
    "im = Image.fromarray(im)\n",
    "display(im)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ec43e650-c4fe-4925-bab4-96b63a1d75a8",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7c5f634d-fd0a-48f1-a5c2-c2e483fd26f9",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
